package com.xhb.ui.tools;

import java.io.File;
import java.util.Collections;
import java.util.Comparator;

import com.teamdev.jxbrowser.deps.com.google.common.collect.Lists;
import com.xhb.ui.http.HttpServer;

public class VideoUtil {

	public static void sync(String path) {
		File parentDir = new File(path);
		
		File [] files=parentDir.listFiles();
		if(path.contains("-")) {
			files=new File[] {new File(path)};
		}
		
		//全部生成完成表示
		Boolean ifFlg=true;
		//检查视频是否全部生成 如果已经全部生成 就不走生成逻辑
		for (File f1 : files) {

			File dir = new File(f1.getPath() + "/n");
			if (!dir.exists()) {
				continue;
			}
			if (dir.listFiles().length == 0) {
				continue;
			}
			
			
			// 生成视频
			for (File fName : dir.listFiles()) {

				
				String resultPath = f1.getPath() + "/video/" + fName.getName();

				File result = new File(resultPath + "/result.mp4");
				if (result.exists()) {
					continue;
				}

				ifFlg=false;
				
			}
			
			if(!ifFlg) {
				break;
			}
		}
		
		//等于 true 表示视频已经全部生成完成
		if(ifFlg) {
			return;
		}
	
		//生成视频

		for (File f1 : files) {

			File dir = new File(f1.getPath() + "/n");
			if (!dir.exists()) {
				continue;
			}
			if (dir.listFiles().length == 0) {
				continue;
			}
			
			
			//文件名排序
			java.util.List<String> array=Lists.newArrayList();
			for (File file : dir.listFiles()) {
				array.add(file.getPath().replace(dir.getPath(), "").replace("\\new", "").replace(".png", ""));
			}
			Collections.sort(array, new Comparator<String>() {
				public int compare(String o1, String o2) {
					return Integer.parseInt(o1) - Integer.parseInt(o2);
				};
			});

			
			Integer J=0;
			
			// 生成视频
			for (String f : array) {

				File fName=new File(dir.getPath()+"/new"+f+".png");
				
				String resultPath = f1.getPath() + "/video/" + fName.getName();

				File result = new File(resultPath + "/result.mp4");
				if (result.exists()) {
					J++;
					continue;
				}

				String cmd = "activate.bat && conda activate paddle_env && cd /d " + HttpServer.BASE_PATH
						+ "\\PaddleGAN\\applications && python -u tools/first-order-demo.py  --driving_video "
						+ HttpServer.BASE_PATH + "//"+J % 3+".mp4  --source_image " + fName.getPath()
						+ "  --ratio 0.4 --relative --adapt_scale --output  " + resultPath + " && exit";

				LogFormat.info("cmd : " + cmd);

				// 调用执行视频命令
				CmdUtil.executeCmdCommand(cmd);
				
				//每个文件生成一个视频
				break;
			}
		}
		
		//递归生成，因为上面循环每次生成一个，这样就每个人都可以按循序生成，所以需要递归
		sync(path);
	}
}
